package aceim.app.widgets.adapters; import java.lang.reflect.ParameterizedType; import java.util.List; import aceim.api.utils.Logger; import aceim.app.R; import android.content.Context; import android.view.SoundEffectConstants; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.widget.AbsListView.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.FrameLayout; public abstract class SingleViewAdapter<I,V extends View> extends ArrayAdapter<I> { //private static final LayoutParams ITEM_LAYOUT_PARAMS = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); private static LayoutParams ITEM_LAYOUT_PARAMS; private final Class<V> mViewClass; private OnSingleViewAdapterItemClickListener mOnItemClickListener; @SuppressWarnings("unchecked") public SingleViewAdapter(Context context, List<I> objects) { super(context, 0, objects); mViewClass = (Class<V>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]; } @SuppressWarnings("unchecked") @Override public View getView(final int position, View convertView, final ViewGroup parent) { V view; if (convertView != null) { view = (V) convertView; } else { try { view = mViewClass.getConstructor(Context.class).newInstance(getContext()); if (ITEM_LAYOUT_PARAMS == null) { int defaultItemSize = getContext().getResources().getDimensionPixelSize(R.dimen.top_bottom_bar_height) - getContext().getResources().getDimensionPixelSize(R.dimen.top_bottom_padding); ITEM_LAYOUT_PARAMS = new LayoutParams(defaultItemSize, defaultItemSize); } view.setLayoutParams(ITEM_LAYOUT_PARAMS); //int padding = getContext().getResources().getDimensionPixelSize(R.dimen.default_padding); //int sidePadding = padding / 2; //view.setPadding(sidePadding, padding, sidePadding, padding); view.setBackgroundResource(android.R.drawable.menuitem_background); } catch (Exception e) { Logger.log(e); FrameLayout f = new FrameLayout(getContext()); f.setLayoutParams(new LayoutParams(0, 0)); view = (V) f; } } I item = getItem(position); fillView(item, view); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { performItemClick(v, position, 0); } }); return view; } protected abstract void fillView(I item, V view); private void performItemClick(View view, int position, long id) { if (mOnItemClickListener == null) { return; } view.playSoundEffect(SoundEffectConstants.CLICK); view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); mOnItemClickListener.onItemClick(this, position); } public void setOnItemClickListener(OnSingleViewAdapterItemClickListener onItemClickListener) { this.mOnItemClickListener = onItemClickListener; } public static abstract class OnSingleViewAdapterItemClickListener implements OnItemClickListener { public abstract void onItemClick(SingleViewAdapter<?,?> adapter, int position); @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { onItemClick((SingleViewAdapter<?, ?>) parent.getAdapter(), position); } } }